#!/usr/bin/python3.8.9
# -*- coding: utf-8 -*-

# @Author  : Tina Yu
# @Time    : 2022-1-3 21:01
from appium.webdriver.common.mobileby import MobileBy
from appium.webdriver.webdriver import WebDriver

# 基类，封装基本的方法，通常封装基础的框架级别的，例如：driver、find、find_and_click、find_and_send、swipe_find等等
from utils.my_logger import log


class BasePage:

    # 为了接收app中传递的driver，并给driver增加类型注释，以便后面能够自动联想.
    # webdriver给初始值是为了方便在app首次启动时做判断
    def __init__(self, driver: WebDriver = None):
        self.driver = driver

    def find(self, by, locator):
        """
        查找元素
        :param by: 查找方式
        :param locator: 定位器
        :return: 找到的元素
        """
        log.info(f'查找元素==>查找方式：{by}，定位器【{locator}】')
        return self.driver.find_element(by, locator)

    def finds(self, by, locator):
        """
        查找元素集
        :param by: 查找方式
        :param locator: 定位器
        :return: 找到的元素集合
        """
        log.info(f'查找元素列表==>查找方式：{by}，定位器【{locator}】')
        return self.driver.find_elements(by, locator)

    def find_and_click(self, by, locator):
        """
        查找元素并点击
        :param by: 查找方式
        :param locator: 定位器
        :return: 找到的元素集合
        """
        log.info(f'查找元素并点击==>查找方式：{by}，定位器【{locator}】')
        self.find(by, locator).click()

    def find_and_send(self, by, locator, text):
        """
        查找元素并输入内容
        :param by: 查找方式
        :param locator: 定位器
        :param text: 输入的内容
        :return: None
        """
        log.info(f'点击并输入【{text}】。查找方式：{by}，定位器【{locator}】')
        self.find(by, locator).send_keys(text)

    def sroll_to_click(self, text):
        """
        滚动到目标元素并点击
        :param text: 定位目标的内容
        :return: None
        """
        log.info(f'滚动查找到【{text}】')
        self.driver.find_element(MobileBy.ANDROID_UIAUTOMATOR,
                                 'new UiScrollable(new UiSelector().scrollable(true))'
                                 f'.scrollIntoView(new UiSelector().text("{text}"));').click()

    def get_toast_text(self):
        """获取toast的文本信息"""
        # 获取toast控件的文本
        toast_text = self.find(MobileBy.XPATH, "//*[@class='android.widget.Toast']").text
        log.info(f'获取到的toast文本为：【{toast_text}】')
        return toast_text
